#ifndef SETTINGSPARSER_H
#define SETTINGSPARSER_H

#include <string>
#include <unordered_map>
#include <vector>

class SettingsParser {
private:
        // 存储设置的键值对映射，键和值都是字符串
    std::unordered_map<std::string, std::string> settingsMap;
    
    // 记录键的插入顺序，用于保持设置的顺序性
    std::vector<std::string> orderList;
    
    // 存储配置文件的路径
    std::string filePath;
    
    // 移除字符串两端的空白字符
    std::string trim(const std::string& str) const;

public:
    // 构造函数，初始化设置文件路径
    explicit SettingsParser(const std::string& filePath);
    
    // 从文件中加载设置
    void loadSettingsFromFile();
    
    // 根据键获取设置值作为字符串
    std::string getSetting(const std::string& key) const;
    // 根据键获取设置值并将其解析为整数
    int getSettingAsInt(const std::string& key) const;
    
    // 设置键值对设置，返回是否成功
    bool setSetting(const std::string& key, const std::string& value);
    // 设置键值对设置，值为整数，返回是否成功
    bool setSettingAsInt(const std::string& key, int value);
    // 批量设置多个键值对设置
    void setSettings(const std::unordered_map<std::string, std::string>& newSettings);
    
    // 将当前设置保存到文件中，返回操作是否成功
    bool saveSettingsToFile() const;
    
    // 获取所有的设置键值对
    const std::unordered_map<std::string, std::string>& getAllSettings() const;
    // 获取设置项的顺序列表
    const std::vector<std::string>& getOrderList() const;
    
    // 打印所有当前的设置项
    void printAllSettings() const;
};

#endif // SETTINGSPARSER_H